/*
 * axios封装
 * 请求拦截、相应拦截、错误统一处理
 */

import axios from 'axios';
import router from '../router'
import store from '../store'
import { Toast } from 'vant'

// 请求超时时间
axios.defaults.baseURL = 'http://xiaozaopai.com/'
axios.defaults.timeout = 10000;
axios.defaults.headers['Content-Type'] = 'application/json';

// 请求拦截器
axios.interceptors.request.use(
  config => {
    // 请求头参数加上token
    const token = store.state.token
    token && (config.headers.token = token);
    return config;
  },
  error => {
    return Promise.error(error);
  })

// 接口响应拦截器
axios.interceptors.response.use(
  // 浏览器状态码200~299
  response => {
    if (response.status === 200) {
      const { code, msg } = response.data
      if (code !== 1) {
        if (code === -2) {
          Toast.fail('未登录')
          router.replace('/');
        } else {
          Toast.fail(msg)
        }
      }
      return Promise.resolve(response);
    } else {
      return Promise.reject(response);
    }
  },
  error => {
    if (error.code == 'ECONNABORTED') {
      return Toast.fail('网络连接超时，请重试')
    }
    if (!error.response) {
      return Toast.fail('服务器错误，请联系管理员')
    }
    if (error.response.status) {
      switch (error.response.status) {
        // 404请求不存在                
        case 404:
          Toast.fail('网络请求不存在')
          break;
        // 其他错误，直接抛出错误提示                
        default:
          Toast.fail(error.response.data.message)
      }
      return Promise.reject(error.response);
    }
  }
);

export default axios
